import { getInfo, setInfo } from '@/utils/storage'

export default {
  namespaced: true,
  /**
   * state是用来提供数据的
   */
  state () {
    return {
      /**
       * 个人权证相关
       * { token: '', userId: '' }
       * 
       * 刷新后可以从浏览器本地去读，所以就完成了vuex的持久化
       * getInfo是@/utils/storage中的方法，这里面都是操作浏览器本地localstorage的方法
       */
      userInfo: getInfo()
    }
  },
  /**
   * mutations是用来提供修改数据的方法的
   */
  mutations: {
    /**
     * 将用户信息存到本地
     * @param {Object} state 所有mutations的第一个参数都是state
     * @param {Object} obj
     */
    setUserInfo (state, obj) {
      state.userInfo = obj // 将用户信息存到vuex中
      setInfo(obj) // 将用户信息存到浏览器本地localstorage
    }
  },
  /**
   * actions是用来处理异步操作的
   */
  actions: {
    logout (context) {
      // 个人信息要重置
      context.commit('setUserInfo', {})

      // 购物车信息要重置 (跨模块调用 mutation)  cart/setCartList
      context.commit('cart/setCartList', [], {
        root: true
      })
    }
  },
  /**
   * getters用来提供一些基于state派生出来的属性的
   */
  getters: {}
}
